Link installed skills into Claude Code and fix the post-install command hint - #139
Closed
vshulman wants to merge 1 commit into
Closed
Link installed skills into Claude Code and fix the post-install command hint#139vshulman wants to merge 1 commit into
vshulman wants to merge 1 commit into
Conversation
`parallel-cli skills install` writes to `~/.agents/skills`, the cross-agent location read by Gemini CLI, Copilot, Codex and Amp. Claude Code only scans `~/.claude/skills` (and `<project>/.claude/skills`), so skills installed by the CLI were invisible to it — the install reported success and nothing showed up. Keep `.agents/skills` as the single canonical copy and link each installed skill into Claude Code's tree when a `.claude` directory is present. Symlinks mean there is nothing to keep in sync; the folder is copied where symlinks need privileges (Windows). The step is best-effort: it never clobbers an existing skill of the same name, and any failure only warns rather than failing the primary install. Uninstall drops the links it created, and install prunes links for skills that a narrower `--skill` set removed, so no dead slash commands are left behind. Post-install output now names the actual commands. The CLI ships loose skills, so they are invoked as `/parallel-web-search`, not `/parallel:parallel-web-search` — that namespaced form belongs to the marketplace plugin, a separate install channel. README gains an Agent Skills section documenting both, and the CLI overview tree gains the `skills` group it was missing. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Reported and scoped in internal discussion; opened from a fork (no write access to this repo).
Problem
Wrong folder.
parallel-cli skills installwrites to~/.agents/skills— the emerging cross-agent location, read by Gemini CLI, Copilot, Codex and Amp. Claude Code only scans~/.claude/skills(and<project>/.claude/skills) and never looks there. The install reports success and nothing shows up in Claude Code.Wrong command. The post-install output echoed raw skill names without saying how to invoke them, and users following the plugin docs reach for
/parallel:parallel-web-search, which only exists via the marketplace plugin. The CLI ships loose skills, so the real command is the un-namespaced folder name, e.g./parallel-web-search.Fix
~/.agents/skillsstays the canonical install location — it isn't a mistake, it's a bet on the cross-agent convention, and Claude Code is the holdout. No spec mandates a shared directory (the Agent Skills standard covers the file format only), so the installer now bridges the gap:link_into_claude_code()symlinks each skill into~/.claude/skills(or<project>/.claude/skills) when a.claudedirectory is present. Claude Code follows symlinks, so one canonical copy serves every agent — nothing to keep in sync.os.symlinkraises (Windows without the symlink privilege).~/.claude/skillsis itself already a symlink to the install dir (the manual workaround some of us applied), it's detected and left as-is rather than nesting links inside it..agents/skillsinstall.uninstallremoves the links it created, andinstallprunes links whose target a narrower--skillset removed, so no dead slash commands linger. Only dangling symlinks pointing into the install dir are pruned; foreign links and hand-written skills are untouched.Install/reinstall output now prints
Skill commands: /parallel-web-search, …plus a restart hint, and--jsongains aclaude_codeblock reporting what was linked, copied, skipped or pruned.Docs: new Agent Skills README section covering install locations, the Claude Code linking behavior, and the loose-skill vs. plugin command distinction (
/parallel-web-searchvs/parallel:parallel-web-search). The CLI overview tree was also missing theskillsgroup entirely — added.Verification
uv run pytest -q→ 798 passed. 20 new tests: symlink creation, home vs. project root, idempotency, stale-link refresh, don't-clobber, whole-dir-symlink detection, copy fallback, copy-fallback failure, prune vs. foreign-link safety, and uninstall cleanup.ruff check/ruff format/tach check/ty checkall clean.skills.parallel.aiindex in a sandboxedHOME: global install links all 10 skills; a hand-writtenparallel-findallskill and an unrelated file survive untouched; narrowing to--skill parallel-web-searchprunes the other 9 links; uninstall leaves only the user's own files;--projectlinks into the project.claude/skills; and a pre-existing whole-dir symlink is detected and skipped.Note for a follow-up
The live index currently advertises two skills named
resultandstatus, which install as/resultand/status— very generic commands to inject into a user's agent. Looks like index pollution rather than intended skills; not touched here.